﻿using Sebrae.Academico.Trilhas.BM.Classes;
using Sebrae.Academico.Trilhas.Dominio.Classes;
using System;

namespace Sebrae.Academico.Trilhas.BP
{
    public class ManterParticipacaoItemTrilha : BusinessProcessBase
    {

        private BMParticipacaoItemTrilha pRepositorio;

        public ManterParticipacaoItemTrilha() : base() { }

        private void ValidarParticipacaoItemTrilhaInformada(ItemTrilhaParticipacao pItemTrilhaParticipacao)
        {
            // Validando se a instância da item trilha participacao está nula.
            pRepositorio.ValidarInstancia(pItemTrilhaParticipacao);

            if (pItemTrilhaParticipacao.UsuarioTrilha == null)
                throw new Exception("Usuário da Trilha não foi Informado. Campo Obrigatório");

            if (pItemTrilhaParticipacao.ItemTrilha == null)
                throw new Exception("O Item da Trilha não foi informado. Campo Obrigatório");

        }

        public void IncluirParticipacaoItemTrilha(ItemTrilhaParticipacao pItemTrilhaParticipacao)
        {


            try
            {


                pRepositorio = new BMParticipacaoItemTrilha(unitOfWork);

                ValidarParticipacaoItemTrilhaInformada(pItemTrilhaParticipacao);


                //unitOfWork.IniciarTransacao();

                pRepositorio.IncluirParticipacaoItemTrilha(pItemTrilhaParticipacao);

                //unitOfWork.Commit();
            }

            catch (Exception ex)
            {
                //unitOfWork.Rollback();
                throw ex;
            }


        }


        public void AlterarParticipacaoItemTrilha(ItemTrilhaParticipacao pItemTrilhaParticipacao)
        {


            try
            {


                pRepositorio = new BMParticipacaoItemTrilha(unitOfWork);

                ValidarParticipacaoItemTrilhaInformada(pItemTrilhaParticipacao);


                //unitOfWork.IniciarTransacao();

                pRepositorio.IncluirParticipacaoItemTrilha(pItemTrilhaParticipacao);

                //unitOfWork.Commit();
            }

            catch (Exception ex)
            {
                //unitOfWork.Rollback();
                throw ex;
            }


        }


        public ItemTrilhaParticipacao ObterParticipacaoItemTrilhaporID(int pId)
        {
            try
            {
                pRepositorio = new BMParticipacaoItemTrilha(unitOfWork);
                return pRepositorio.ObterItemTrilhaParticipacaoporId(pId);
            }
            catch (Exception ex)
            {
                //unitOfWork.Rollback();
                throw ex;
            }
        }

    }

}